题意:给你一棵树,可以把树上父亲相同的两条长度相同的链合并。(如图)问你最后能不能变成一条链,能的话求链的最短长度。
显然如果可以合并,那么合并后长度一定$\leqslant$直径的一半,所以,我们找到直径的中点作为根(若有两个中点则随便选一个)
对于每个点(除根以外),如果它有两条或以上长度为不同的子节点形成的链,那么这棵树是无法合并的,输出$-1$,否则用一个$set$维护子节点形成的链长度情况,向上个节点传递$set$中链的长度$+1$
特别的,对于根,因为它没有父亲节点,所以即使它有两条子节点形成的链,也是合法的(但是如果有三条及以上就不合法了),如果有一条链,返回这条链的长度$+1$,如果有两条链,返回两条链长度之和$+2$;
最后,对于答案,如果$ans$是$2$的倍数,将它不停地除以$2$,直到$ans$是奇数。
1 |
|